package com.duck.communication.dao;

import com.duck.communication.domain.vo.ExpertInfoVo;
import org.apache.ibatis.annotations.Mapper;

import java.util.HashMap;
import java.util.List;

@Mapper
public interface QuestionDao {

    /**
     * 农户向指定专家提问
     * @param question 包含了指定专家ID
     * @return 判断
     */
    Integer addDirectedQuestion(HashMap<String,Object> question);

    /**
     * 农户发表公开提问，所有专家都可以回答
     * @param question 不包含指定专家ID，字段expert_id为空
     * @return 判断
     */
    Integer addPublicQuestion(HashMap<String,Object> question);

    /**
     * 查询自己所提的问题
     * @param userId 农户id
     * @return 所提问题列表
     */
    List<HashMap<String,Object>> searchAllByFarmerId(String userId);

    /**
     * 返回所有的问题
     * @return 问题列表
     */
    List<HashMap<String,Object>> searchAllQuestions();

    /**
     * 专家查看所有自己需要回答的问题
     * @param userId 专家ID
     * @return 问题列表
     */
    List<HashMap<String,Object>> searchAllByExpertId(String userId);

    /**
     * 专家回答问题
     * @return 判断
     */
    Integer addAnswer(HashMap<String,Object> answer);

    /**
     * 查找专家已经回答过的问题
     * @param userId 专家ID
     * @return 问题列表
     */
    List<HashMap<String,Object>> searchExpertAnsweredQuestion(String userId);

    /**
     * 查找指定专家但未回答的问题
     * @param userId 专家ID
     * @return 问题列表
     */
    List<HashMap<String,Object>> searchDirectedUnAnswer(String userId);

    /**
     * 查找所有已经回答过的问题
     * @return 列表
     */
    List<HashMap<String,Object>> searchAllAnsweredQuestion();

    /**
     * 查找专家回答问题的数量以及被采纳数
     * @param userId 专家ID
     * @return 结果
     */
    ExpertInfoVo searchExpertAnswerNumberAndAcceptedNumber(String userId);

    /**
     * 标记改回答为最佳回答（被采纳）
     * @param answerId 回答ID
     * @return 判断
     */
    Integer updateAcceptedAnswer(Integer answerId);

    Integer updateIsAnswer(Integer postId);

    List<HashMap<String,Object>> searchQuestion(String questionId);

    /**
     * 查找所有未回答的问题
     * @return 列表
     */
    List<HashMap<String,Object>> searchUnAnsweredQuestion();

    /**
     * 所有公开问题
     * @return 列表
     */
    List<HashMap<String,Object>> searchAllPublicQuestion();

    /**
     * 所有公开问题(已回答）
     * @return 列表
     */
    List<HashMap<String,Object>> searchAllPublicAnsweredQuestion();

    /**
     * 所有公开问题(未回答）
     * @return 列表
     */
    List<HashMap<String,Object>> searchAllPublicUnAnsweredQuestion();
}
